package cn.xinfei.xdecision.engine.runner.service.impl;

import cn.xinfei.xdecision.common.datadao.DecisionDataQueryMapper;
import cn.xinfei.xdecision.common.datamodel.DecisionDataQueryLog;
import cn.xinfei.xdecision.common.utils.util.JsonUtils;
import cn.xinfei.xdecision.engine.runner.service.DecisionDataQueryService;
import com.alibaba.fastjson.JSONObject;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.github.pagehelper.PageHelper;
import com.github.pagehelper.PageInfo;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import java.util.Date;
import java.util.List;

@Service
@Slf4j
public class DecisionDataQueryServiceImpl extends ServiceImpl<DecisionDataQueryMapper, DecisionDataQueryLog> implements DecisionDataQueryService {

    @Autowired
    private DecisionDataQueryMapper decisionDataQueryLogMapper;

    @Override
    public PageInfo<DecisionDataQueryLog> getDecisionDataQueryLogByBizId(String bizId, String state, Date start, Date end, Integer pageNo, Integer pageSize) {

        PageHelper.startPage(pageNo, pageSize);


        LambdaQueryWrapper<DecisionDataQueryLog> wrapper = new LambdaQueryWrapper<>();
        if (StringUtils.isNotEmpty(bizId)) {
            wrapper.eq(DecisionDataQueryLog::getRequestId, bizId);
        }

        if (start != null) {
            wrapper.ge(DecisionDataQueryLog::getUpdateTime, start);
        }

        if (end != null) {
            wrapper.le(DecisionDataQueryLog::getUpdateTime, end);
        }


        List<DecisionDataQueryLog> decisionDataQueryLog = decisionDataQueryLogMapper.selectList(wrapper);

        PageInfo pageInfo = new PageInfo<>(decisionDataQueryLog);

        if (decisionDataQueryLog == null || decisionDataQueryLog.isEmpty()) {
            return null;
        }
        pageInfo.setTotal(pageInfo.getTotal());
        return pageInfo;


    }

    @Override
    public DecisionDataQueryLog saveDecisionDataQueryLogByBizId(DecisionDataQueryLog decisionDataQueryLog) {
        String decisionId = decisionDataQueryLog.getDecisionId();
        try {
            int insert = decisionDataQueryLogMapper.insert(decisionDataQueryLog);
            log.info("saveDecisionDataQueryLog decisionId={},insert={}", decisionId, insert);
        } catch (Exception e) {
            log.error("saveDecisionDataQueryLog error.msg={},log={}", e.getMessage(), JsonUtils.toJsonString(decisionDataQueryLog), e);
        }
        return decisionDataQueryLog;
    }

    @Override
    public List<DecisionDataQueryLog> getDecisionDataQueryLogByBizId(String bizId) {

        LambdaQueryWrapper<DecisionDataQueryLog> wrapper = new LambdaQueryWrapper<>();
        wrapper.eq(DecisionDataQueryLog::getRequestId, bizId);
        List<DecisionDataQueryLog> decisionDataQueryLog = decisionDataQueryLogMapper.selectList(wrapper);

        return decisionDataQueryLog;
    }

    @Override
    public List<DecisionDataQueryLog> getDecisionDataQueryLogByDecisionId(String decisionId) {

        QueryWrapper<DecisionDataQueryLog> wrapper = new QueryWrapper<>();
        wrapper.eq("decision_id", decisionId);
        List<DecisionDataQueryLog> decisionDataQueryLog = decisionDataQueryLogMapper.selectList(wrapper);

        return decisionDataQueryLog;
    }

    @Override
    public DecisionDataQueryLog updateDecisionDataQueryLogByDecisionId(DecisionDataQueryLog decisionDataQueryLog) {

        try {
            String decisionId = decisionDataQueryLog.getDecisionId();
            QueryWrapper<DecisionDataQueryLog> wrapper = new QueryWrapper<>();
            wrapper.eq("decision_id", decisionId);
            int update = decisionDataQueryLogMapper.update(decisionDataQueryLog, wrapper);
            log.info("updateDecisionDataQueryLog decisionId={},update={}", decisionId, update);
        } catch (Exception e) {
            log.error("updateDecisionDataQueryLog error.msg={},log={}", e.getMessage(), JsonUtils.toJsonString(decisionDataQueryLog), e);
        }
        return decisionDataQueryLog;
    }
}
